package com.blue.user.mq.beans;

import com.blue.user.mq.listeners.BusinessListener;
import com.blue.user.mq.listeners.SecondTestListener;
import lombok.AllArgsConstructor;
import lombok.Getter;

import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;

/**
 * 队列映射的监听器配置
 *
 * @author liulei
 * @version 1.0
 */
@Getter
@AllArgsConstructor
public enum QueueListenerMapEnum {

    /**
     * 监听队列映射的监听器,此处的env对应配置文件中的configs 下 env配置，下标从0开始
     */
    ENV_TEST_01("env_01_queue", 0, BusinessListener.class, true),
    ENV_TEST_02("env_02_queue", 1, SecondTestListener.class, true);

    private String queue;

    /**
     * 环境
     */
    private Integer env;

    /**
     * 队列对应的监听器【消费者listener】
     */
    private Class listener;

    /**
     * 是否启用
     */
    private boolean open;

    public String getValue() {
        return queue;
    }

    public static QueueListenerMapEnum getClassByEnvAndQueue(@NotNull(message = "env不能为空") Integer env,
                                                             @NotNull(message = "queue不能为空") String queue) {
        QueueListenerMapEnum[] enums = QueueListenerMapEnum.values();
        for (QueueListenerMapEnum e : enums) {
            if (e.isOpen() && e.getEnv().equals(env) && e.getValue().equals(queue)) {
                return e;
            }
        }
        throw new IllegalArgumentException("不存在对应枚举，请检查待监听队列字符串1");
    }

    public static List<String> getMonitorQueuesByEnv(@NotNull(message = "env不能为空") Integer env) {
        List<String> list = new ArrayList<>(16);
        QueueListenerMapEnum[] enums = QueueListenerMapEnum.values();
        for (QueueListenerMapEnum e : enums) {
            if (e.isOpen() && e.getEnv().equals(env)) {
                list.add(e.getQueue());
                continue;
            }
        }
        return list;
    }
}
